package cn.wangjie.spark.ckpt

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object SparkCkptTest {

  def main(args: Array[String]): Unit = {
    // 构建SparkContext上下文实例对象
    val sc: SparkContext = {
      // 1.a 创建SparkConf对象，设置应用属性，比如应用名称和运行模式
			val sparkConf = new SparkConf()
				.setAppName(this.getClass.getSimpleName.stripSuffix("$"))
				.setMaster("local[2]")
			// 1.b 创建实例对象
			SparkContext.getOrCreate(sparkConf)
		}
		
		// TODO: Step1, 设置检查点目录，通常都是HDFS文件系统
		sc.setCheckpointDir("datas/spark/ckpt/")
		
		// 从本地文件系统读取数据
		val inputRDD: RDD[String] = sc.textFile("datas/wordcount/wordcount.data")
		
		// TODO: Step2, 调用RDD中函数，进行Checkpoint操作
		inputRDD.checkpoint()   // lazy操作，需要Action函数触发
		inputRDD.count()
		
		// TODO: Step3, 对已经Checkpoint后RDD操作
		println(inputRDD.count())   // 此时直接从Checkpoint中读取数据，并不是从原始位置
		
		Thread.sleep(10000000)
		// 应用结束，关闭资源
		sc.stop()
	}
	
}
